﻿//-----------------------------------------------------------------------------------------------------------
// Wbfs Engine (WBFSe) Project by Omega Frost 
// http://wbfse.codeplex.com/
//
// WBFSe is Licensed under the terms of the 
// Microsoft Reciprocal License (Ms-RL)
//-----------------------------------------------------------------------------------------------------------
using WBFSe.Attributes;

namespace WBFSe.FormatApi
{
    /// <summary>
    /// Format descriptor interface
    /// </summary>
    public interface IWbfsFormat
    {
        /// <summary>
        /// Name of the format
        /// </summary>
        string Name { get; }

        /// <summary>
        /// Description of the format
        /// </summary>
        string Description { get; }

        /// <summary>
        /// Author of the format
        /// </summary>
        string Author { get; }

        /// <summary>
        /// Project's or author's URL
        /// </summary>
        string Url { get; }

        /// <summary>
        /// Extension in .ext format
        /// </summary>
        string Extension { get; }

        /// <summary>
        /// Format implements a Creator
        /// </summary>
        bool CanCreate { get; }

        /// <summary>
        /// Streams created by the Reader are read-only
        /// </summary>
        bool ReadOnly { get; }

        /// <summary>
        /// The type of game that can be stored in the container
        /// </summary>
        GamePlatform Platform { get; }

        /// <summary>
        /// Information about splitting the container
        /// </summary>
        SplitInfo Split { get; }

        /// <summary>
        /// return new your-reader-type-here()
        /// </summary>
        /// <returns>The specified format reader</returns>
        WbfsReader InvokeReader();

        /// <summary>
        /// return new your-creator-type-here()
        /// </summary>
        /// <returns>The specified format creator</returns>
        WbfsCreator InvokeCreator();
    }
}
